package server.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MiSqlite {
	Usuario user;
	protected static Connection c;
	protected String DriverName;
	@SuppressWarnings("unused")
	private ResultSet rs;
	private Statement st;
public MiSqlite(){
	
}


/**
 * Login, 
 * @param User
 * @return
 */
	public boolean login(Usuario User){
		PreparedStatement st;
		try {
			st = c.prepareStatement(null);
			String sql = "Select usuario,password"+
					"from USUARIOS"+
					"where usuario = "+
					user.usuario;
			ResultSet rs = st.executeQuery(sql);
			if(user.password == rs.getString("password"))
				return true;
			return false;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return false;
	}


	/*
	 * Conexcion del Cliente a la Base de Datos deberia tener un metodo get para
	 * obtener la conexcion creada.
	 */

//	public MiSqlite() {
	//		try {
	//	DriverName = "jdbc:sqlite:// PC URL :/PUERTO"
	//			+ "DataBaseName = Base; user = usuario; password = ...;";
	//
	//	/*
	//	 * Carga la clase driver en memoria
	//	 */
	//	Class.forName("org.sqlite..JDBC");
	//
	//	/*
	//	 * Establezco la conexcion
	//	 */
	//	c = DriverManager.getConnection("jdbc:sqlite:test/db");
	//} catch (Exception e) {
	//	e.printStackTrace();
	//}
	//}

	public void deleteProcedure(Usuario user) {
		try {
			// elimino los registros del repositorio
			String delete = "DELETE" + "REPOSITORIO" + " WHERE ID = " + user.id;
			st.executeQuery(delete);

			// elimino los registros de la tabla de amigos
			delete = "DELETE AMIGOS WHERE id = " + user.id + " or id_amigo = "
					+ user.id;
			st.executeQuery(delete);

			// elimino de la tabla de logs
			delete = "DELETE LOGS WHERE id = " + user.id;
			st.executeQuery(delete);

			// elimino de la tabla de usuarios
			delete = "DELETE USUARIOS WHERE id = " + user.id;

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void newFriendProcedure(Usuario user) {
		/**
		 * Creo una nueva relacion de amistad en la tabla de Amigos. Recibo 2
		 * usuarios? uno q envia solicitud y otro que recibe? Como conozco si
		 * esta online o si se envia al repositorio ? Realizar triggers para
		 * controlar que los dos amigos existan y no se encuentren bloqueados
		 */

	}
	public void insertUsuario() {
		Connection c = null;
		Statement stmt = null;
		try {
			// conecto a la db
			c = DriverManager.getConnection("jdbc:sqlite:test.db");
			// Abro la base de datos
			c.setAutoCommit(false);

			System.out
					.println("Conexcion y apertura de base de datos: Correcta.");

			stmt = c.createStatement();
			String sql = "INSERT INTO USUARIOS"
					+ "(ID,NOMBRE,APELLIDO,USUARIO,PASSWORD,PREGUNTA,RESPUESTA,FECHAALTA,HISTORIAL,ESTADO)"
					+ "VALUES (3,FABIAN,MANCINI,FABIAN,1234,COMO ME LLAMO?,FABIAN,17-6-2013,---, ACTIVO";
			stmt.executeUpdate(sql);
			System.out.println("Registro creado correctamente!");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void selectUsuario() throws SQLException {

		c = DriverManager.getConnection("jdbc:sqlite:tablas/chat.db");
		Statement stmt = c.createStatement();
		System.out.println("Registro creado correctamente!");
		String nombre, apellido, usuario, password;
		ResultSet result = stmt.executeQuery("SELECT * FROM USUARIOS");
		while (result.next()) {
			nombre = result.getString("nombre");
			apellido = result.getString("apellido");
			usuario = result.getString("usuario");
			password = result.getString("password");

			System.out.println(nombre + apellido + usuario + password);

			stmt.close();
		}
	}

	@SuppressWarnings("null")
	public void update() throws SQLException {

		Statement stmt = null;
		String sql;
		sql = "UPDATE USUARIOS set PASSWORD=9876 WHERE ID=1;";
		stmt.executeUpdate(sql);
	}

	@SuppressWarnings("unused")
	public void delete(String condicion) {
		/*
		 * Ver como tratar la condicion para evitar problemas de seguridad
		 */
		String sql = ("DELETE USUARIOS WHERE " + condicion);
	}

		/*
		 * Recuperar datos por Statement Con es el get que me falta hacer en el
		 * constructor
		 */
		//Statement st = cm.getCon().createStatement;
		//ResultSet rs = st.executeQuery("SELECT * FROM USUARIOS");

		/*
		 * Consulta de agrupamiento de datos
		 */
		//@SuppressWarnings("unused")
		//String sql = "SELECT * FROM USUARIOS,COUNT(*) " + "GROUP BY ESTADO;";

		/*
		 * Consulta que me devuelve la cantidad de activos en la tabla
		 */
		//sql = "SELECT * FROM USUARIOS,COUNT(DISTINTC ESTADO);";
	}
//}
